package com.gitee.secretopen.sso.controller.form;

import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @Author Xjt
 * @Date 2021/2/26 20:29
 * @Version 1.0
 */
@Data
public class PageInfo<T> implements Serializable {

    private static final Long serialVersionUID = 1L;

    /**
     * 总记录数
     */
    private int totalCount;

    /**
     * 每页显示记录数
     */
    private int pageSize;

    /**
     * 总页数
     */
    private int totalPage;

    /**
     * 当前页数
     */
    private int pageIndex;

    /**
     * 数据列表
     */
    private List<T> data;

    /**
     * 分页
     * @param pageIndex 当前页数
     * @param pageSize 每页显示记录数
     * @param totalCount 总记录数
     * @param data 数据列表
     * @param <T> 分页数据泛型
     * @return PageInfo 分页对象
     */
    public static <T> PageInfo<T> getInstance(int pageIndex, int pageSize, int totalCount, List<T> data) {
        PageInfo<T> pageInfo = new PageInfo<>();
        pageInfo.setPageIndex(pageIndex);
        pageInfo.setPageSize(pageSize);
        pageInfo.setTotalCount(totalCount);
        pageInfo.setTotalPage((int) Math.ceil((double) totalCount / pageSize));
        pageInfo.setData(data);
        return pageInfo;
    }

    /**
     * 分页
     * @param page MyBatis-Plus 的 IPage 对象
     * @param <T> 分页数据泛型
     * @return PageInfo 分页对象
     */
    public static <T> PageInfo<T> getInstance(IPage<T> page) {
        PageInfo<T> pageInfo = new PageInfo<>();
        pageInfo.setPageIndex((int) page.getCurrent());
        pageInfo.setPageSize((int) page.getSize());
        pageInfo.setTotalCount((int) page.getTotal());
        pageInfo.setTotalPage((int) page.getPages());
        pageInfo.setData(page.getRecords());
        return pageInfo;
    }
}
